/**
 * 
 */
package ao.com.bna.dao;

import java.util.List;

import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import ao.com.bna.beans.ItemSuplemento;
import ao.com.bna.beans.Nota;
import ao.com.bna.beans.Suplemento;


public class SuplementoDao extends HibernateDaoSupport {

	/**
	 * @see Metodo que lista.
	 */
	public List<Suplemento> listar() {
		return getHibernateTemplate().loadAll(Suplemento.class);
	}

	/**
	 * @see Metodo para obten��o de um registo passando como parametro o id.
	 */
	public Suplemento obterPorID(Long id) {
		return (Suplemento) getHibernateTemplate().get(Suplemento.class, id);
	}

	/**
	 * @see Metodo que actualiza o registo na tabela 
	 */
	public void gravar(Suplemento info) {
		getHibernateTemplate().saveOrUpdate(info);
	}

	/**
	 * @see Metodo que remove o registo na tabela
	 */
	public void remover(Suplemento info) {
		getHibernateTemplate().delete(info);
	}

	// ------------------------------------------------------------
	
	/**
	 * @see Metodo que actualiza o registo na tabela
	 */
	public void gravar(Suplemento info, List<Nota> notas) {
		Transaction tx = this.getSessionFactory().openSession()
				.getTransaction();
		try {
			tx.begin();
			getHibernateTemplate().saveOrUpdate(info);
			if (notas.size() < 1) {
				tx.rollback();
				System.out.println("TRANSACAO CANCELADA...");
				return;
			}
			
			for (Nota nota : notas) {
				ItemSuplemento itemSuplemento = new ItemSuplemento();
				itemSuplemento.setSuplemento(info);
				itemSuplemento.setNota(nota);
				getHibernateTemplate().saveOrUpdate(itemSuplemento);
				System.out.println("TRANSACAO BEM SUCEDIDA...");
			}
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
			ex.printStackTrace();
		}
	}

	/**
	 * @see Metodo que lista.
	 */
	public List<ItemSuplemento> listarItems() {
		return getHibernateTemplate().loadAll(ItemSuplemento.class);
	}

	/**
	 * @see Metodo para obtencao de um registo passando como parametro o id.
	 */
	public ItemSuplemento obterItemPorID(Long id) {
		return (ItemSuplemento) getHibernateTemplate().get(ItemSuplemento.class, id);
	}

	/**
	 * @see Metodo que actualiza o registo na tabela 
	 */
	public void gravarItem(ItemSuplemento info) {
		getHibernateTemplate().saveOrUpdate(info);
	}

	/**
	 * @see Metodo que remove o registo na tabela
	 */
	public void removerItem(ItemSuplemento info) {
		getHibernateTemplate().delete(info);
	}

}
